From 37d218b1608b0f0735bd247e2724133898df14f3 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Fri, 8 Feb 2019 23:11:48 +0100 Subject: [PATCH] imwayland: Toggle OSK more sparingly Specifically it is avoided to be toggled if: - Just received focus (in order to preserve OSK state across focus changes) - Moving cursor around. Still allow some jitter as perfect accuracy is not possible. Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1277 --- gtk/gtkimcontextwayland.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gtk/gtkimcontextwayland.c b/gtk/gtkimcontextwayland.c index 7ec3efdb62..adf1722035 100644 --- a/gtk/gtkimcontextwayland.c +++ b/gtk/gtkimcontextwayland.c @@ -771,6 +771,8 @@ gtk_im_context_wayland_focus_in (GtkIMContext *context) if (!global->text_input) return; + if (self->gesture) + gtk_event_controller_reset (GTK_EVENT_CONTROLLER (self->gesture)); global->current = context; if (global->focused) @@ -806,9 +808,30 @@ gtk_im_context_wayland_set_cursor_location (GtkIMContext *context, GdkRectangle *rect) { GtkIMContextWayland *context_wayland; + int side; context_wayland = GTK_IM_CONTEXT_WAYLAND (context); + if (context_wayland->cursor_rect.x == rect->x && + context_wayland->cursor_rect.y == rect->y && + context_wayland->cursor_rect.width == rect->width && + context_wayland->cursor_rect.height == rect->height) + return; + + /* Reset the gesture if the cursor changes too far (eg. clicking + * between disjoint positions in the text). + * + * Still Allow some jittering (a square almost double the cursor rect height + * on either side) as clicking on the exact same position between characters + * is hard. + */ + side = context_wayland->cursor_rect.height; + + if (context_wayland->gesture && + (ABS (rect->x - context_wayland->cursor_rect.x) >= side || + ABS (rect->y - context_wayland->cursor_rect.y) >= side)) + gtk_event_controller_reset (GTK_EVENT_CONTROLLER (context_wayland->gesture)); + context_wayland->cursor_rect = *rect; notify_cursor_location (context_wayland); commit_state (context_wayland); -- 2.30.2